package br.com.farmabid.produto;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Entity
@Table(name="formas_apresentacao")
public class FormaApresentacao implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = -4730339882817019291L;
	@Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id")
	private Integer id;
	
	@Column(name="anvisa")
	private String anvisa;
	
	@Column(name="ean")
	private String ean;
	
	@Column(name="codigoms")
	private String codigoms;
	
	@Column(name="concentracao")
	private String concentracao;
	
	@Column(name="quantidade")
	private Integer quantidade;
	
	@OneToOne(fetch = FetchType.LAZY)
	@JoinColumn(name="unidade_id")
	private Unidade unidade;
	
	@Column(name="descricao")
	private String descricao;
	
	@Column(name="instrucoes_uso")
	private String instrucoesUso;
	
	@ManyToOne
	@JoinColumn(name="produto_id")
	private Produto produto;
	
	@OneToOne(fetch = FetchType.EAGER)
	@JoinColumn(name="categoria_id")
	private CategoriaProduto categoria;
	
	@OneToOne(fetch = FetchType.EAGER)
	@JoinColumn(name="forma_uso_id")
	private FormaUso formaUso;
	
	@OneToOne(fetch = FetchType.EAGER)
	@JoinColumn(name="apresentacao_id")
	private Apresentacao apresentacao;
	
	@OneToMany(mappedBy="formaApresentacao", fetch = FetchType.LAZY, cascade=CascadeType.ALL, orphanRemoval = true)
	private List<ProdutoImagem> imagens = new ArrayList<ProdutoImagem>();

	private transient Boolean farmaciaOfertou;
	private transient Double valorAlvo;
	private transient Double valorMinimo;
	private transient Integer quantidadeOfertada;
	private transient Boolean encarte;
	
	public Double getValorAlvo() {
		return valorAlvo;
	}

	public void setValorAlvo(Double valorAlvo) {
		this.valorAlvo = valorAlvo;
	}

	public Double getValorMinimo() {
		return valorMinimo;
	}

	public void setValorMinimo(Double valorMinimo) {
		this.valorMinimo = valorMinimo;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getAnvisa() {
		return anvisa;
	}

	public void setAnvisa(String anvisa) {
		this.anvisa = anvisa;
	}

	public String getConcentracao() {
		return concentracao;
	}

	public void setConcentracao(String concentracao) {
		this.concentracao = concentracao;
	}

	public Integer getQuantidade() {
		return quantidade;
	}

	public void setQuantidade(Integer quantidade) {
		this.quantidade = quantidade;
	}

	public void setUnidade(Unidade unidade) {
		this.unidade = unidade;
	}

	public Unidade getUnidade() {
		return unidade;
	}

	public Produto getProduto() {
		return produto;
	}

	public void setProduto(Produto produto) {
		this.produto = produto;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public String getInstrucoesUso() {
		return instrucoesUso;
	}

	public void setInstrucoesUso(String instrucoesUso) {
		this.instrucoesUso = instrucoesUso;
	}

	public CategoriaProduto getCategoria() {
		return categoria;
	}

	public void setCategoria(CategoriaProduto categoria) {
		this.categoria = categoria;
	}
	public FormaUso getFormaUso() {
		return formaUso;
	}

	public void setFormaUso(FormaUso formaUso) {
		this.formaUso = formaUso;
	}

	public Apresentacao getApresentacao() {
		return apresentacao;
	}

	public void setApresentacao(Apresentacao apresentacao) {
		this.apresentacao = apresentacao;
	}

	public List<ProdutoImagem> getImagens() {
		return imagens;
	}

	public void setImagens(List<ProdutoImagem> imagens) {
		if(this.imagens != null){
			this.imagens.clear();
			this.imagens.addAll(imagens);
		} else {
			this.imagens = imagens;
		}
	}

	public Boolean getFarmaciaOfertou() {
		return farmaciaOfertou;
	}

	public void setFarmaciaOfertou(Boolean farmaciaOfertou) {
		this.farmaciaOfertou = farmaciaOfertou;
	}

	public String getEan() {
		return ean;
	}

	public void setEan(String ean) {
		this.ean = ean;
	}

	public String getCodigoms() {
		return codigoms;
	}

	public void setCodigoms(String codigoms) {
		this.codigoms = codigoms;
	}

	public Integer getQuantidadeOfertada() {
		return quantidadeOfertada;
	}

	public void setQuantidadeOfertada(Integer quantidadeOfertada) {
		this.quantidadeOfertada = quantidadeOfertada;
	}

	public Boolean getEncarte() {
		return encarte;
	}

	public void setEncarte(Boolean encarte) {
		this.encarte = encarte;
	}
}